Représentations graphiques
Python est muni de modules avancés permettant de faire de n'analyse numérique
numpy
et de tracer des représentations graphiques diverses
matplotlib
. La syntaxe n'est pas très éloignée de matlab ou scilab.
IImporter les modules
On peut taper directement les deux lignes d'import :
import
numpy
import matplotlib.pyplot
import matplotlib.pyplot
Cela signifie qu'il faudra taper des commandes assez longues du type
matplotlib.pyplot.plot (x,y)
. Pour éviter ce problème, on va utiliser des alias...
On peut donner des alias aux modules utilisés :
import
numpy
as
np
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
Créer un fichier courbes.py et importer les deux modules avec les alias.
Si vous souhaitez éviter de faire précéder chaque instruction par
np
ou
plt
, il est toujours possible d'utiliser la syntaxe :
from
numpy
import
*
from matplotlib.pyplot import *
Des erreurs peuvent se produire si des fonctions d'autres modules possèdent le même nom...
from matplotlib.pyplot import *
IITracé de points
Pour tracer une ligne brisée à partir d'une liste de points, il faut en fait deux listes : la liste des abscisses
x
et la liste des ordonnées
y
. Il faut utiliser la commande
plot
:
plt.plot (x,y)
Si la courbe ne s'affiche pas directement dans la console, ajouter la ligne :
plt.show ()
Tracer la ligne brisée passant par les points \(A (1,4), B (4,4), C (1,1), D (4,1)\).
Il faut séparer les abscisses des ordonnées :
x = [1, 4, 1, 4]
y = [4, 4, 1, 1]
plt.plot (x, y)
y = [4, 4, 1, 1]
plt.plot (x, y)
Par défaut les points sont reliés par une ligne bleue d'épaisseur 1 pixel et les points ne sont pas marqués. Ces paramètres sont modifiable (voir partie options de tracé).
IIITracé d'une courbe
La courbe ne sera pas réellement tracée, mais plutôt une ligne brisée avec un pas suffisamment fin pour s'en approcher visuellement. Il faudra utiliser la fonction
linspace
du module
numpy
pour créer une liste compatible avec les fonctions mathématiques :
x=np.linspace (départ, arrivée, nombre_de_points)
y=ma_fonction (x)
plt.plot (x,y)
y=ma_fonction (x)
plt.plot (x,y)
Pour tracer la fonction \(f (x) = sin (x)\) sur \([0;2 \pi]\), on écrira :
x=np.linspace (0, 2*np.pi, 40)
y=np.sin (x)
plt.plot (x,y)
y=np.sin (x)
plt.plot (x,y)

Reproduire l'exemple précédent.
Le module
numpy
contient les fonctions mathématiques usuelles et les constantes, accessibles ici en préfixant par 'np' le nom de la fonction :
np.nom_de_la_fonction
Voici quelques fonctions et constantes usuelles.
Cliquer ici
pour une liste complète.
np.sin () | sinus |
np.cos () | cosinus |
np.sqrt () | racine carrée |
np.abs () | valeur absolue |
np.log () | logarithme népérien |
np.exp () | exponentielle |
Pour tracer plusieurs courbes sur le même graphique, c'est assez simple :
x=np.linspace (départ, arrivée, nombre_de_points)
y1=f1 (x)
y2=f2 (x)
plt.plot (x,y1) plt.plot (x,y2)
y1=f1 (x)
y2=f2 (x)
plt.plot (x,y1) plt.plot (x,y2)
Tracer sur le même graphique les fonctions usuelles définie sur \([0;2]\) : identité, carré, inverse, racine, cube.
Nous reviendrons sur cette figure
IVOptions de tracé
Il est possible de choisir des options pour mettre en forme ses courbes, ses nuages de points et une légende.
1Points et lignes
Pour changer la forme et la taille des points et des lignes, ajouter
np.plot (x,y,'o')
. Voici quelques options :
Cliquer ici
pour une liste complète des options.
'o' | nuage de points ronds |
'o-' | courbe + points ronds |
'--' | courbe en pointillés (sans points) |
's:' | points carrés (s) et pointillés fins (:) |
x-. | points croix (x) et pointillés moyens (-.) |
2Couleurs
Pour changer la couleur, ajouter
np.plot (x,y,'r')
. Voici quelques options :
'r' | rouge |
'g' | vert (green) |
'b' | bleu |
'm' | magenta |
c | cyan |
w | blanc (white) |
k | noir |
Ces couleurs sont composables avec les options de formes des points et des courbes.
La commande
plt.plot (x,y,'rx-')
trace une courbe pleine avec des points rouges en forme de croix.
Revenir sur la figure des fonctions usuelles, et donner une couleur différente pour chacune. Mettre la droite d'équation \(y=x\) en pointillés.
Il est possible de choisir n'importe quelle couleur par son code hexadécimal plt.plot (x,y,color='#ff6699') .
Choisir par exemple sa couleur sur ce site .
3Largeur de ligne
Pour changer la largeur de la ligne, indiquer l'épaisseur via l'argument
linewidth
en indiquant un nombre :
plt.plot (x,y,linewidth=2)
.
4Légende
Pour ajouter une légende, il faut d'abord indiquer un
label
pour chaque courbe tracée comme ceci :
plt.plot (x,y,label='description').
Puis après le tracé des courbes, afficher la légende comme ceci :
plt.legend ().
x = np.linspace (0, 5 , 30)
y1 = 2*x+1
y2=x**2-1
plt.plot (x, y1,'r', label='affine')
plt.plot (x, y2,'b', label='second degré')
plt.legend ()
y1 = 2*x+1
y2=x**2-1
plt.plot (x, y1,'r', label='affine')
plt.plot (x, y2,'b', label='second degré')
plt.legend ()
Revenir sur la figure des fonctions usuelles et ajouter une légende pour chaque fonction indiquant sont nom.
5Réglage des axes et de la fenêtre
Pour régler la fenêtre d'affichage, on peu préciser un domaine en ajoutant :
plt.xlim (xmin, xmax) plt.ylim (ymin, ymax)
Revenir sur la figure des fonctions usuelles forcer l'affichage pour \(x\) sur [0;2] et \(y\) sur \([0;2]\)
Pour que le repère soit orthonormé, il faut écrire
plt.axis ("equal")
Revenir sur la figure des fonctions usuelles et afficher une figure non déformée. Ajuster les valeurs
xmin
,
xmax
,
ymin
et
ymax
.
Tracer la figure suivante :

Le module
matplotlib
permet d'aller beaucoup plus loin dans les représentations graphiques (3D, histogrammes, coordonnées polaires, images, projections, etc.).
Cliquer ici pour voir des exemples.
VTracer un rectangle plein
Ca fait un peu sorti de nulle part, mais nous en auront besoin dans le prochain TD...
Pour tracer un rectangle plein, il faut en premier récupérer la référence des axes (get current axis) :
axes = plt.gca ()
Puis paramétrer le rectangle en donnant le point de départ (en bas à gauche), la largeur et la hauteur :
rect=plt.Rectangle ((x0, y0), largeur, hauteur, color = 'red')
Enfin le tracer (c'est là qu'on a besoin des axes) :
axes.add_patch (rect)
Revenir sur la figure des fonctions usuelles et séparer les zones \(x \lt 1\) et \(x \gt 1\) à l'aide deux rectangles colorés par dessus lesquels seront tracées les autres courbes.